home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 9 / FM Towns Free Software Collection 9.iso / t_os / tool / extdrv / src / util.asm < prev   
Assembly Source File  |  1994-11-16  |  5KB  |  393 lines

  1. _TEXT    segment    para public 'CODE'
  2. _TEXT    ends
  3. _DATA    segment dword public 'DATA'
  4. _DATA    ends
  5. _BSS    segment dword public 'BSS'
  6. _BSS    ends
  7. DGROUP group    _TEXT,_DATA, _BSS
  8.     assume    cs:DGROUP
  9.     assume    ds:DGROUP
  10.  
  11. _TEXT    segment    para public 'CODE'
  12.     public    _get_apl3
  13. _get_apl3 proc    near
  14.     mov    dx,404H
  15.     in    al,dx
  16.     ret
  17. _get_apl3 endp
  18.  
  19.     public    _set_apl3
  20. _set_apl3 proc    near
  21.     push    bp
  22.     mov    bp,sp
  23.     mov    ax,4[bp]
  24.     mov    dx,404H
  25. IFNDEF NOAPL3
  26.     out    dx,al
  27. ENDIF
  28.     pop    bp
  29.     ret
  30. _set_apl3 endp
  31.  
  32.     public    _strcpy
  33. _strcpy    proc    near
  34.     push    bp
  35.     mov    bp,sp
  36.     push    si
  37.     push    di
  38.     mov    di,4[bp]
  39.     mov    si,6[bp]
  40. #1:
  41.     mov    al,[si]
  42.     mov    [di],al
  43.     inc    si
  44.     inc    di
  45.     or    al,al
  46.     jne    #1
  47.     pop    di
  48.     pop    si
  49.     pop    bp
  50.     ret
  51. _strcpy    endp
  52.  
  53.     public    _strlen
  54. _strlen    proc    near
  55.     push    bp
  56.     mov    bp,sp
  57.     mov    bx,4[bp]
  58.     xor    ax,ax
  59.     jmp    #2
  60. #1:
  61.     inc    bx
  62.     inc    ax
  63. #2:
  64.     cmp    byte ptr [bx],0
  65.     jne    #1
  66.     pop    bp
  67.     ret
  68. _strlen    endp
  69.  
  70.     public    _strchr
  71. _strchr    proc    near
  72.     push    bp
  73.     mov    bp,sp
  74.     mov    bx,4[bp]
  75.     mov    al,6[bp]
  76.     jmp    #2
  77. #1:
  78.     inc    bx
  79. #2:
  80.     mov    ah,[bx]
  81.     or    ah,ah
  82.     je    #3
  83.     cmp    ah,al
  84.     jne    #1
  85.     mov    ax,bx
  86.     pop    bp
  87.     ret
  88. #3:
  89.     xor    ax,ax
  90.     pop    bp
  91.     ret
  92. _strchr    endp
  93.  
  94.     public    _memcpy
  95. _memcpy    proc    near
  96.     push    bp
  97.     mov    bp,sp
  98.     push    si
  99.     push    di
  100.     mov    ax,ds
  101.     mov    es,ax
  102.     mov    di,4[bp]
  103.     mov    si,6[bp]
  104.     mov    cx,8[bp]
  105.     cld
  106.     rep movsb
  107.     pop    di
  108.     pop    si
  109.     pop    bp
  110.     ret
  111. _memcpy    endp
  112.  
  113.     public    _bzero
  114. _bzero    proc    near
  115.     push    bp
  116.     mov    bp,sp
  117.     push    di
  118.     mov    di,4[bp]
  119.     ;
  120. ;    mov    ax,6[bp]
  121. ;    mov    es,ax
  122. ;    mov    cx,8[bp]
  123.     mov    ax,ds
  124.     mov    es,ax
  125.     mov    cx,6[bp]
  126.     ;
  127.     xor    eax,eax
  128.     shr    cx,2
  129.     cld
  130.     rep stosd
  131.     mov    cx,6[bp]
  132.     and    cx,3
  133.     je    #1
  134.     rep stosb
  135. #1:
  136.     pop    di
  137.     pop    bp
  138.     ret
  139. _bzero    endp
  140.  
  141.     public    _strcmp
  142. _strcmp    proc    near
  143.     push    bp
  144.     mov    bp,sp
  145.     push    si
  146.     push    di
  147.     mov    ax,1
  148.     mov    di,4[bp]
  149.     mov    si,6[bp]
  150. #1:
  151.     mov    bl,[si]
  152.     cmp    bl,[di]
  153.     jne    #2
  154.     inc    si
  155.     inc    di
  156.     or    bl,bl
  157.     jne    #1
  158.     xor    ax,ax
  159. #2:
  160.     pop    di
  161.     pop    si
  162.     pop    bp
  163.     ret
  164. _strcmp    endp
  165.  
  166.     public    _strcpy_from
  167. _strcpy_from proc near
  168.     push    bp
  169.     mov    bp,sp
  170.     push    si
  171.     push    di
  172.     mov    si,4[bp]
  173.     mov    ax,6[bp]
  174.     mov    es,ax
  175.     mov    di,8[bp]
  176. #1:
  177.     mov    al,es:[si]
  178.     mov    [di],al
  179.     inc    si
  180.     inc    di
  181.     or    al,al
  182.     jne    #1
  183. ;
  184.     pop    di
  185.     pop    si
  186.     pop    bp
  187.     ret
  188. _strcpy_from endp
  189.  
  190.     public    _strcpy_to
  191. _strcpy_to proc    near
  192.     push    bp
  193.     mov    bp,sp
  194.     push    si
  195.     push    di
  196.     mov    si,4[bp]
  197.     mov    di,6[bp]
  198.     mov    ax,8[bp]
  199.     mov    es,ax
  200. #1:
  201.     mov    al,[si]
  202.     mov    es:[di],al
  203.     inc    si
  204.     inc    di
  205.     or    al,al
  206.     jne    #1
  207. ;
  208.     pop    di
  209.     pop    si
  210.     pop    bp
  211.     ret
  212. _strcpy_to endp
  213.  
  214.     public    _copy_to
  215. _copy_to proc    near
  216.     push    bp
  217.     mov    bp,sp
  218.     push    si
  219.     push    di
  220.     mov    si,4[bp]
  221.     mov    cx,6[bp]
  222.     mov    di,8[bp]
  223.     mov    ax,10[bp]
  224.     mov    es,ax
  225.     cld
  226.     mov    bx,cx        ; save
  227.     shr    cx,2
  228.     je    SHORT #1
  229.     rep movsd        ; word align is not considered now ^_^;
  230. #1:
  231.     mov    cx,bx        ; restore
  232.     and    ecx,3        ; rest count
  233.     je    SHORT #2
  234.     rep movsb
  235. #2:
  236.     pop    di
  237.     pop    si
  238.     pop    bp
  239.     ret
  240. _copy_to endp
  241.  
  242.     public    _copy_from
  243. _copy_from proc    near
  244.     push    bp
  245.     mov    bp,sp
  246.     push    ds
  247.     push    si
  248.     push    di
  249.     mov    ax,ds
  250.     mov    es,ax
  251.     mov    si,4[bp]
  252.     mov    ax,6[bp]
  253.     mov    ds,ax
  254.     mov    cx,8[bp]
  255.     mov    di,10[bp]
  256.     cld
  257.     mov    bx,cx        ; save
  258.     shr    cx,2
  259.     je    SHORT #1
  260.     rep movsd        ; word align is not considered now ^_^;
  261. #1:
  262.     mov    cx,bx        ; restore
  263.     and    cx,3        ; rest count
  264.     je    SHORT #2
  265.     rep movsb
  266. #2:
  267.     pop    di
  268.     pop    si
  269.     pop    ds
  270.     pop    bp
  271.     ret
  272. _copy_from endp
  273.  
  274.     extrn    org_ss:word, org_sp:word, _regs:near
  275.     public    _set_owner
  276. _set_owner proc    near
  277.     push    bp
  278.     mov    bp,sp
  279.     push    es
  280.     push    di
  281.     mov    di,4[bp]
  282.     mov    ax,6[bp]
  283.     mov    es,ax
  284.     mov    cx,sp
  285.     mov    ss,cs:org_ss
  286.     mov    sp,cs:org_sp
  287.     push    ds
  288.     mov    ds,word ptr ds:_regs+20
  289.     mov    ax,120cH    ; set filetbl owner
  290.     int    2fH
  291.     pop    ds
  292.     mov    ax,ds
  293.     mov    ss,ax
  294.     mov    sp,cx
  295.     pop    di
  296.     pop    es
  297.     pop    bp
  298.     ret
  299. _set_owner endp
  300.  
  301.     public    _get_param
  302. _get_param proc    near
  303.     push    bp
  304.     mov    bp,sp
  305.     push    es
  306.     mov    ax,cs:org_ss
  307.     mov    es,ax
  308.     mov    bx,cs:org_sp
  309.     mov    ax,es:6[bx]
  310.     pop    es
  311.     pop    bp
  312.     ret
  313. _get_param endp
  314.  
  315.     public    _xcopy
  316. _xcopy    proc    near
  317.     push    bp
  318.     mov    bp,sp
  319.     push    si
  320.     push    di
  321.     mov    si,4[bp]
  322.     mov    bx,6[bp]
  323.     mov    di,8[bp]
  324.     mov    dx,10[bp]
  325.     mov    cx,12[bp]
  326.     mov    ah,23H
  327.     int    8eH
  328.     pop    di
  329.     pop    si
  330. IFNDEF NOAPL3
  331.     mov    dx,404H
  332.     in    al,dx
  333.     or    al,80H
  334.     out    dx,al
  335. ENDIF
  336.     pop    bp
  337.     ret
  338. _xcopy    endp
  339.  
  340.     public    _xalloc
  341. _xalloc    proc    near
  342.     push    bp
  343.     mov    bp,sp
  344.     push    di
  345. IFNDEF NOAPL3
  346.     mov    dx,404H
  347.     in    al,dx
  348.     push    ax
  349.     and    al,7fH
  350.     out    dx,al
  351. ENDIF
  352.     mov    cx,4[bp]    ; size in KB
  353.     mov    ah,21H        ; alloc protect memory
  354.     int    8eH             ; dx:di <-- start address
  355.     jnc    #1
  356.     xor    dx,dx
  357.     xor    di,di
  358. #1:
  359. IFNDEF NOAPL3
  360.     pop    ax
  361.     mov    bx,dx        ; save dx
  362.     mov    dx,404H
  363.     out    dx,al
  364.     mov    dx,bx        ; restore dx
  365. ENDIF
  366.     mov    ax,di
  367.     pop    di
  368.     pop    bp
  369.     ret
  370. _xalloc    endp
  371.  
  372.     public    _xfree
  373. _xfree    proc    near
  374.     push    bp
  375.     mov    bp,sp
  376.     push    di
  377.     mov    di,4[bp]
  378.     mov    dx,6[bp]
  379.     or    dx,dx
  380.     jne    #1
  381.     or    di,di
  382.     je    #2
  383. #1:
  384.     mov    ah,22H        ; free protect memory
  385.     int    8eH
  386. #2:
  387.     pop    di
  388.     pop    bp
  389.     ret
  390. _xfree    endp
  391. _TEXT    ends
  392.     end
  393.